package example.Util;

import org.junit.jupiter.api.Test;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 字符串工具类
 */
public class StringUtils {

    //region isEmpty 检验字符串是否为空：null和空字符串

    /**
     * 检验字符串是否为空：null和空字符串
     *
     * @param obj 数据
     * @return boolean
     */
    public static boolean isEmpty(Object obj) {
        return obj == null || "".equals(obj.toString().trim());
    }
    //endregion

    //region 字符串转换

    /**
     * 转换成字符串
     *
     * @param obj 数据对象
     * @return String
     */
    public static String toString(Object obj) {
        if (obj == null) {
            return "";
        }
        return obj.toString();
    }


    //region format 占位符拼接字符串

    /**
     * 占位符拼接字符串
     *
     * @param format 要格式化的完整字符串
     * @param objs   数据
     * @return
     */
    public static String format(String format, Object... objs) {
        StringBuilder sb = new StringBuilder();
        if (isEmpty(format)) {
            return "";
        }
        if (format.indexOf("{}") < 0) {
            return format;
        }
        String[] formatArr = format.split("\\{}");
        if (formatArr.length < 2) {
            return formatArr[0];
        }
        if (objs != null || objs.length > 0) {
            for (int i = 0; i < formatArr.length; i++) {
                sb.append(formatArr[i] + toString(objs[i]));
            }
        }
        return sb.toString();
    }


    //region bytesToBase64 bytes[]转换成Base64字符串

    /**
     * bytes[]转换成Base64字符串
     *
     * @param bytes byte数组
     * @return String
     */
    public static String bytesToBase64(byte[] bytes) {
        if (bytes == null || bytes.length <= 0) {
            return "";
        }
        return Base64.getEncoder().encodeToString(bytes);
    }

    // 获取14位时间戳yyyyMMddHHmmss
    public static String get14Timestamp() {
        Date now = new Date();
        // 创建 SimpleDateFormat 对象，指定日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String timestamp = dateFormat.format(now);
        return timestamp;
    }



    //获取yyyy-MM-dd HH:mm:ss格式的当前时间
    public static String getNowTime() {
        Date now = new Date();
        // 创建 SimpleDateFormat 对象，指定日期格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return dateFormat.format(now);
    }


    //获取yyyy-MM-dd HH:mm:ss格式的当前时间加多少分钟的时间
    public static String getCurrentTimePlusMinutes(int minutes) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MINUTE, minutes);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(calendar.getTime());
    }


    //将map内的参数按照A-z的顺序拼接成key=value的形式拼接成字符串
    public static String mapToStringSortedByKey(Map<String, String> map) {
        StringBuilder sb = new StringBuilder();
        TreeMap<String, String> sortedMap = new TreeMap<>(map);
        for (Map.Entry<String, String> entry : sortedMap.entrySet()) {
            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
        }
        if (sb.length() > 0) {
            sb.setLength(sb.length() - 1);
        }
        return sb.toString();
    }



    @Test
    public void test() {
        System.out.println(getCurrentTimePlusMinutes(10));
    }


}
